ORACLE手工删除数据库

您所在的位置:网站首页 oracle 删除sql ORACLE手工删除数据库

ORACLE手工删除数据库

2024-04-22 22:11| 来源: 网络整理| 查看: 265

很多人习惯用ORACLE的DBCA工具创建、删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档。此处实验环境为Oracle Linux Server release 5.7,数据库版本为10.2.0.5.0

 

Step 1: .获得控制文件、数据文件,日志文件等相关信息

获取这些信息,一方面是为了后面的建库做参考,另外一个是为了验证后面一些操作,如果这些都没有必要,其实是可以可以跳过这一步的。

SQL> select status ,name from v$controlfile; SQL> select * from v$dbfile;  SQL> select * from v$logfile; SQL>archive log list; 

 

Step 2: 停止监听服务和OEM

$lsnrctl stop  或 lsnrctl stop listener_name [oracle@DB-Server ~]$ emctl stop dbconsoleTZ set to HongkongOracle Enterprise Manager 10g Database Control Release 10.2.0.5.0  Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.http://EGMLNX02.eel1.esquel.com:1158/em/console/aboutApplicationStopping Oracle Enterprise Manager 10g Database Control ...   Cannot determine Oracle Enterprise Manager 10g Database Control process. /u01/app/oracle/product/10.2.0/db_1/xxxxx_xxx/emctl.pid does not exist.

 

Step 3: 关闭数据库实例

SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.

 

 

Step 4:启动到数据库实例到mount状态

使用exclusive restart或普通模式都可以

SQL> startup mount exclusive restrict;或SQL> startup mount;

 

 

Step 5: 修改参数为允许受限的会话模式

这一步骤是必须的,否则在drop database时会报ORA-01586: database must be mounted EXCLUSIVE and not open for this operation

SQL> alter system enable restricted session;

 

Step 6:使用drop database命令来清除数据库

SQL> drop database;

 

drop database 命令会删除控制文件和在控制文件中所列的数据文件,如果数据库正在使用spfile文件,则一并删除。

备份文件和归档日志文件不会被删除,我们可以之后通过RMAN进行删除。

如果数据库是建立在裸设备上,那么这个命令不会删除指定裸设备上的文件。

# deletes all database files, both ASM and non-ASM

When you issue this statement, Oracle Database drops the database and deletes all control files and datafiles listed in the control file. If the database used a server parameter file (spfile), it is also deleted.

Archived logs and backups are not removed, but you can use Recovery Manager (RMAN) to remove them. If the database is on raw disks, this statement does not delete the actual raw disk special files.

DROP DATABASE

The DROP DATABASE command deletes these files from operating system.

* Datafiles

* Online Redo Log Files

* Controlfiles

* SPFILE (if it exists)

The DROP DATABASE command does not delete the following files:

* init.ora (text version of the Oracle initialization file)

* password file

* entries in listener files

* entries in oratab file

其实最好是在执行drop database命令时,查看alert_$ORACLE_SID的输出内容,即可有个大概的了解。在metlink上看到一个手工删除数据文件、联机重做日志、控制文件的脚本,如下所示,这个也可以作为一个参考。

SQL>  SET SERVEROUTPUT ONSQL>  DECLARE      TYPE string_arr IS TABLE OF VARCHAR2(1024);      file_list string_arr;      BEGIN           SELECT t.file_path BULK COLLECT           INTO file_list           FROM (SELECT NAME file_path                  FROM V$DATAFILE                 UNION                   SELECT MEMBER file_path                   FROM V$LOGFILE                 UNION                   SELECT NAME file_path                   FROM v$controlfile                 UNION                   SELECT VALUE file_path                    FROM v$parameter                    WHERE NAME LIKE '%dest'                 UNION                   SELECT VALUE file_path                   FROM v$parameter2                   WHERE NAME = 'utl_file_dir'                 UNION                   SELECT '$ORACLE_BASE/admin/$ORACLE_SID' file_path                    FROM dual                 ) t;                  FOR i IN file_list.FIRST .. file_list.LAST LOOP                            DBMS_OUTPUT.PUT_LINE('rm -f ' || file_list(i));                 END LOOP;          END;         /

 

执行上面脚本就能得到类似下面输出的内容。当然,这个脚本必须在前面步骤之前执行。

rm -f $ORACLE_BASE/admin/$ORACLE_SID

rm -f /ORATEST/oracle/admin/bdump

rm -f /ORATEST/oracle/admin/cdump

rm -f /ORATEST/oracle/admin/udump

rm -f /ORATEST/oracle/product/10.1/rdbms/audit

rm -f /ORATEST/oradata/control01.ctl

rm -f /ORATEST/oradata/control02.ctl

rm -f /ORATEST/oradata/control03.ctl

rm -f /ORATEST/oradata/data01.dbf

rm -f /ORATEST/oradata/data02.dbf

rm -f /ORATEST/oradata/redo01.log

rm -f /ORATEST/oradata/redo02.log

rm -f /ORATEST/oradata/redo03.log

rm -f /ORATEST/oradata/sysaux01.dbf

rm -f /ORATEST/oradata/system01.dbf

rm -f /ORATEST/oradata/undotbs01.dbf

rm -f /ORATEST/oradata/users01.dbf

rm -f ?/dbs/arch

 

Step 7:手动清理相关文件

 

$echo $ORACLE_SID                                      --确认当前的ORACLE_SID$ls $ORACLE_BASE/admin/$ORACLE_SID                     --删除Oracle Base目录下$ORACLE_SID时,先检查、确认一下$ rm -rf $ORACLE_BASE/admin/$ORACLE_SID                --删除oracle base目录下的$ORACLE_SID的所有内容 注意,任何删除前最好先检查、确认,例如下面删除归档日志,我测试的环境,没有开启归档模式,所以下面命令根本没有必要 $ ls -lrt $ORACLE_BASE/arch/$ORACLE_SID          $ rm -rf $ORACLE_BASE/arch/$ORACLE_SID                 --清除归档日志,注意归档路径的正确性        $ rm -rf $ORACLE_BASE/flash_recovery_area/$ORACLE_SID  --清除闪回区的内容删除前,最好将所有的参数文件保存到另外一个目录,以免需要参考时需要$ cp $ORACLE_HOME/dbs/*  /tmp/$ rm -rf $ORACLE_HOME/dbs/*$ORACLE_SID*                --清除参数文件    

Step 8.清理监听相关文件

$ rm $TNS_ADMIN/*.ora                          --如果设定了$TNS_ADMIN变量,否则删除默认路径下的监听文件 $ rm $ORACLE_HOME/network/admin/*.ora          --注意,如果动态监听可能不存在这些文件。如果不删除,重新创建同样名字数据库                                                --时,监听可能会有一些异常情况。

 

Step 9.修改oratab文件以及.bash_profile

 

这个步骤不是必须的,是情况和需要而定。

$ vi /etc/oratab --去掉实例相关的设置

$ vi ~/.bash_profile --去掉实例相关的设置

 

参考资料:

http://blog.csdn.net/leshami/article/details/6454479

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=508865219788761&id=443822.1&displayIndex=10&_afrWindowMode=0&_adf.ctrl-state=38ojq5hbc_203



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3